package com.Ajava1704.for反射;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.List;

/**
 * 作者: LCG
 * 日期: 2020/2/17 08:53
 * 描述:
 */
public class Test015 {

    public static void main(String[] args) throws Exception {

         Class zclass=ForUser.class;

         ForUser forUser=new ForUser();

         Class<? extends ForUser> aClass = forUser.getClass();
        //获取当前的这个类的所有的接口的类类
        Class<?>[] interfaces = aClass.getInterfaces();



        Method test1 = aClass.getMethod("test", String.class, String.class, List.class);

        Method test = aClass.getDeclaredMethod("test", String.class);//除了共有的方法私有的方法也可以获取到
        test.setAccessible(true);
        //Method test = aClass.getMethod("test", ); //这种方式只能获取公开的方法

        Object zhangsan = test.invoke(forUser, "zhangsan");
        System.out.println(zhangsan);

        //test.getAnnotation(class)//获取 方法上的注解


        //aClass.getFields()//获取所有的属性 只能获取公开的属性
        //aClass.getDeclaredFields()///获取所有的属性 包括私有的属性
        //aClass.getField(name)//根据名称获取
        //aClass.getDeclaredField(name )//获取私有的属性

        Field userName = aClass.getField("userName");
        //userName.getAnnotation()//


        //对构造方法的操作
        Constructor<? extends ForUser> constructor = aClass.getConstructor();

        constructor.newInstance();//使用构造方法创建实例

        int t=5;

        Integer integer=5;

        int yy=integer;





    }

}
